﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using orienta.Code.JQgrid;
using orienta.Helper;
using orienta.Code;
using orienta.Utils;
using orienta.Models;

namespace orienta.Controllers
{
    public class CompendioDetalleController : Controller
    {
        //
        // GET: /CompendioDetalle/

        public ActionResult Index()
        {
            return View();
        }

        public virtual JsonResult ListarCompendio(GridTable grid)
        {
            var jqgrid = new JQgrid();
            var compendioDetalleHelper = new CompendioDetalleHelper();
            try
            {
                var cantidad = compendioDetalleHelper.ContarCompendio();
                var totalPaginas = 0;

                grid.page = (grid.page == 0) ? 1 : grid.page;

                grid.rows = (grid.rows == 0) ? 100 : grid.rows;

                var where = (Utils.Utils.GetWhere(grid.filters, grid.rules));

                if (!string.IsNullOrEmpty(where))
                {
                    grid._search = true;

                    if (!string.IsNullOrEmpty(grid.searchString))
                    {
                        where = where + " and ";
                    }
                }
                if (cantidad > 0 && grid.rows > 0)
                {
                    var div = cantidad / (decimal)grid.rows;
                    var round = Math.Ceiling(div);
                    totalPaginas = Convert.ToInt32(round);
                    totalPaginas = totalPaginas == 0 ? 1 : totalPaginas;
                }

                grid.page = grid.page > totalPaginas ? totalPaginas : grid.page;

                var start = grid.rows * grid.page - grid.rows;
                if (start < 0) start = 0;

                jqgrid.total = totalPaginas;
                jqgrid.page = grid.page;
                jqgrid.records = cantidad;
                jqgrid.start = start;

                var lista = compendioDetalleHelper.BuscarCompendio(grid.rows, grid.page, grid.sidx, grid.sord, where);

                jqgrid.rows = lista.Select(item => new JRow
                {
                    id = item.nIdeCompendio.ToString(),
                    cell = new[]
                    {
                            item.nIdeCompendio.ToString(),
                            item.vNomTabla.ToString(),
                            item.dtFecReg.ToString("dd/MM/yyyy"),
                            item.dFecIniVig.ToString("dd/MM/yyyy"),
                            item.dFecFinVig.HasValue ? item.dFecFinVig.Value.ToString("dd/MM/yyyy") : string.Empty,
                            item.nIdeUsuReg.ToString()
                    }
                }).ToArray();
            }
            catch (Exception ex)
            {
                String e = ex.ToString();
                //MostrarError(ex.Message);
            }

            return Json(jqgrid);
        }


        [HttpPostAttribute]
        public virtual JsonResult CrearCompendio(ORIMaeCompendio entidad)
        {
            var jsonResponse = new JsonResponse { Success = false };

            if (ModelState.IsValid)
            {
                try
                {
                    var compendioDetalleHelper = new CompendioDetalleHelper();
                    var resultado = compendioDetalleHelper.InsertarCompendio(entidad);

                    if (resultado != 0)
                    {
                        jsonResponse.Success = true;
                        jsonResponse.Message = Constantes.MensajeConfirmacion;
                    }
                    else
                    {
                        jsonResponse.Success = false;
                        jsonResponse.Message = Constantes.MensajeError;
                    }
                }
                catch (Exception ex)
                {
                    jsonResponse.Success = false;
                    jsonResponse.Message = Constantes.MensajeError;
                }
            }
            else
            {
                jsonResponse.Message = Constantes.MensajeRequeridos;
            }
            return Json(jsonResponse, JsonRequestBehavior.AllowGet);
        }
        
        [HttpPost]
        public virtual JsonResult Modificar(string id)
        {
            var jsonResponse = new JsonResponse { Success = false };
            var compendioDetalleHelper = new CompendioDetalleHelper();
            
            try
            {
                var entidad = compendioDetalleHelper.SingleCompendio(Convert.ToInt32(id));

                var data = new
                               {
                                   nIdeCompendio = entidad.nIdeCompendio,
                                   vNomTabla = entidad.vNomTabla,
                                   dtFecReg = entidad.dtFecReg.ToString("dd/MM/yyyy"),
                                   dFecIniVig = entidad.dFecIniVig.ToString("dd/MM/yyyy"),
                                   dFecFinVig = entidad.dFecFinVig.HasValue ? entidad.dFecFinVig.Value.ToString("dd/MM/yyyy") : string.Empty
                               };
                entidad.ORIMaeUsuarioReference = null;
                entidad.ORIDetCompendio = null;
                jsonResponse.Success = true;
                jsonResponse.Message = Constantes.MensajeConfirmacion;
                jsonResponse.Data = data;
                    
                }
                catch (Exception ex)
                {
                    jsonResponse.Success = false;
                    jsonResponse.Message = Constantes.MensajeError;
                }
            
            return Json(jsonResponse, JsonRequestBehavior.AllowGet);

        }

        [HttpPostAttribute]
        public virtual JsonResult ModificarCompendio(ORIMaeCompendio entidad)
        {
            var jsonResponse = new JsonResponse { Success = false };

            if (ModelState.IsValid)
            {
                try
                {
                    var compendioDetalleHelper = new CompendioDetalleHelper();
                    var resultado = compendioDetalleHelper.ActualizarCompendio(entidad);

                    if (resultado != 0)
                    {
                        jsonResponse.Success = true;
                        jsonResponse.Message = Constantes.MensajeConfirmacion;
                    }
                    else
                    {
                        jsonResponse.Success = false;
                        jsonResponse.Message = Constantes.MensajeError;
                    }
                }
                catch (Exception ex)
                {
                    jsonResponse.Success = false;
                    jsonResponse.Message = Constantes.MensajeError;
                }
            }
            else
            {
                jsonResponse.Message = Constantes.MensajeRequeridos;
            }
            return Json(jsonResponse, JsonRequestBehavior.AllowGet);
        }
        
        //
        // Detalle

        public virtual JsonResult ListarDetalleCompendio(GridTable grid)
        {
            var jqgrid = new JQgrid();
            var compendioDetalleHelper = new CompendioDetalleHelper();
            try
            {
                //var cantidad = compendioDetalleHelper.ContarDetalleCompendio();
                var totalPaginas = 0;

                grid.page = (grid.page == 0) ? 1 : grid.page;

                grid.rows = (grid.rows == 0) ? 100 : grid.rows;

                var where = (Utils.Utils.GetWhere(grid.filters, grid.rules));

                if (!string.IsNullOrEmpty(where))
                {
                    grid._search = true;

                    if (!string.IsNullOrEmpty(grid.searchString))
                    {
                        where = where + " and ";
                    }
                }
                var cantidad = compendioDetalleHelper.ContarDetalleCompendio(where);

                if (cantidad > 0 && grid.rows > 0)
                {
                    var div = cantidad / (decimal)grid.rows;
                    var round = Math.Ceiling(div);
                    totalPaginas = Convert.ToInt32(round);
                    totalPaginas = totalPaginas == 0 ? 1 : totalPaginas;
                }

                grid.page = grid.page > totalPaginas ? totalPaginas : grid.page;

                var start = grid.rows * grid.page - grid.rows;
                if (start < 0) start = 0;

                jqgrid.total = totalPaginas;
                jqgrid.page = grid.page;
                jqgrid.records = cantidad;
                jqgrid.start = start;

                var lista = compendioDetalleHelper.BuscarDetalleCompendio(grid.rows, grid.page, grid.sidx, grid.sord, where);

                jqgrid.rows = lista.Select(item => new JRow
                {
                    id = item.nIdeDetalle.ToString(),
                    cell = new[]
                    {
                            item.nIdeDetalle.ToString(),
                            item.nIdeCompendio.HasValue ? item.nIdeCompendio.ToString() : string.Empty,
                            item.vCodElemento,
                            item.vNomDetalle,
                            item.vNomCorto,
                            item.nIndEleGrupo.ToString(),
                            item.nIndEleGrupo.ToString() =="1"? "NO":"SI",
                            item.dtFecReg.ToString("dd/MM/yyyy"),
                            item.dtFecIniVig.ToString("dd/MM/yyyy"),
                            item.dtFecFinVig.HasValue ? item.dtFecFinVig.Value.ToString("dd/MM/yyyy") : string.Empty,
                            item.nIdeUsuReg.HasValue ? item.nIdeUsuReg.ToString():string.Empty,
                            item.vDesRef1,
                            item.vDesRef2,
                            item.vDesRef3
                    }
                }).ToArray();
            }
            catch (Exception ex)
            {
                //MostrarError(ex.Message);
            }

            return Json(jqgrid);
        }

        [HttpPostAttribute]
        public virtual JsonResult CrearDetalleCompendio(ORIDetCompendio entidad)
        {
            var jsonResponse = new JsonResponse { Success = false };

            if (ModelState.IsValid)
            {
                try
                {
                    var compendioDetalleHelper = new CompendioDetalleHelper();
                    var resultado = compendioDetalleHelper.InsertarDetalleCompendio(entidad);

                    if (resultado != 0)
                    {
                        jsonResponse.Success = true;
                        jsonResponse.Message = Constantes.MensajeConfirmacion;
                    }
                    else
                    {
                        jsonResponse.Success = false;
                        jsonResponse.Message = Constantes.MensajeError;
                    }
                }
                catch (Exception ex)
                {
                    jsonResponse.Success = false;
                    jsonResponse.Message = Constantes.MensajeError;
                }
            }
            else
            {
                jsonResponse.Message = Constantes.MensajeRequeridos;
            }
            return Json(jsonResponse, JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public virtual JsonResult ModificarDetalle(string id)
        {
            var jsonResponse = new JsonResponse { Success = false };
            var compendioDetalleHelper = new CompendioDetalleHelper();

            try
            {
                var entidad = compendioDetalleHelper.SingleDetalleCompendio(Convert.ToInt32(id));

                var data = new
                {
                    nIdeDetalle = entidad.nIdeDetalle,
                    nIdeCompendio = entidad.nIdeCompendio,
                    vCodElemento =entidad.vCodElemento,
                    vNomDetalle= entidad.vNomDetalle,
                    vNomCorto = entidad.vNomCorto,
                    nIndEleGrupo=entidad.nIndEleGrupo,
                    dtFecIniVig = entidad.dtFecIniVig.ToString("dd/MM/yyyy"),
                    dtFecFinVig = entidad.dtFecFinVig.HasValue ? entidad.dtFecFinVig.Value.ToString("dd/MM/yyyy") : string.Empty,
                    vDesRef1=entidad.vDesRef1,
                    vDesRef2=entidad.vDesRef2,
                    vDesRef3=entidad.vDesRef3
                    
                };
                jsonResponse.Success = true;
                jsonResponse.Message = Constantes.MensajeConfirmacion;
                jsonResponse.Data = data;

            }
            catch (Exception ex)
            {
                jsonResponse.Success = false;
                jsonResponse.Message = Constantes.MensajeError;
            }

            return Json(jsonResponse, JsonRequestBehavior.AllowGet);

        }

        [HttpPostAttribute]
        public virtual JsonResult ModificarDetalleCompendio(ORIDetCompendio entidad)
        {
            var jsonResponse = new JsonResponse { Success = false };

            if (ModelState.IsValid)
            {
                try
                {
                    var compendioDetalleHelper = new CompendioDetalleHelper();
                    var resultado = compendioDetalleHelper.ActualizarDetalleCompendio(entidad);

                    if (resultado != 0)
                    {
                        jsonResponse.Success = true;
                        jsonResponse.Message = Constantes.MensajeConfirmacion;
                    }
                    else
                    {
                        jsonResponse.Success = false;
                        jsonResponse.Message = Constantes.MensajeError;
                    }
                }
                catch (Exception ex)
                {
                    jsonResponse.Success = false;
                    jsonResponse.Message = Constantes.MensajeError;
                }
            }
            else
            {
                jsonResponse.Message = Constantes.MensajeRequeridos;
            }
            return Json(jsonResponse, JsonRequestBehavior.AllowGet);
        }


        //
        //Grupos

        public ActionResult Grupo()
        {
            return View();
        }

        [HttpPost]
        public virtual JsonResult ListarbyGrupo(int idGrupo)
        {
            try
            {
                var jsonResponse = new JsonResponse();
                var compendioDetalleHelper = new CompendioDetalleHelper();

                var items = compendioDetalleHelper.ListarbyGrupo(Convert.ToInt32(idGrupo));

                jsonResponse.Success = true;
                jsonResponse.Data = items;
                return Json(jsonResponse, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json(new JsonResponse { Message = ex.Message }, JsonRequestBehavior.AllowGet);
            }
        }

        [HttpPost]
        public virtual JsonResult Guardar(List<GruposView> entidades)
        {
            var jsonResponse = new JsonResponse { Success = false };
            var compendioHelper = new CompendioDetalleHelper();

            try
            {
                foreach (var item in entidades)
                {
                    if (item.Accion =="Insert")
                    {
                        compendioHelper.InsertarDetalleGrupo(item);
                    }
                    if (item.Accion == "Eliminar" && item.nIdeGrupo > 0)
                    {
                        compendioHelper.ActualizarDetalleGrupo(item);
                    }
                }

                jsonResponse.Success = true;
                jsonResponse.Message = "Se guardaron con Éxito.";
            }
            catch (Exception ex)
            {
                jsonResponse.Message = "Ocurrió un error.";
            }

            return Json(jsonResponse, JsonRequestBehavior.AllowGet);
        }

    }
}
